# !/usr/bin/env python
# -*-coding:utf-8 -*-

"""
# File       : bivalveCarbonSink.py
# Time       ：2022/6/12 9:38
# Author     ：author name
# version    ：python 3.8
# Description：
    双壳贝类碳汇(bivalveCarbonSink)：利用双壳贝类从空气中吸收并且固定二氧化碳的过程、活动、机制和能力。

"""


def carbonSequestration(methods, ls, r=12 / 44):
    """
        碳汇量Carbon sequestration
        输出：
            D_Csink_b:养殖周期内二氧化碳的碳汇量，吨每公顷每年（t/hm^2*a）
        输入：
            r:碳与二氧化碳的转换系数，即碳元素在二氧化碳分子中的质量比例12/44
    """
    ls1 = []
    print(ls)
    for i in range(len(ls)):
        ls1.append(float(ls[i]))  # 转换为浮点数
    print(ls1)
    N_bq, W_sh, W_m, C_ssh, C_sm = ls1[:5]
    W_a, R_sdw, R_ssh, R_sm = ls1[5:9]
    W_by, R_adw, R_ash, C_ash, R_am, C_am = ls1[9:15]
    T = ls1[15]

    def seedingCarbon(methods, N_bq, W_sh, C_ssh, W_m, C_sm, W_a, R_sdw, R_ssh, R_sm):
        """
          双壳贝类贝苗初始投放碳储量
          单位面积养殖双壳贝类贝苗的碳量。
          输出：
            C_bs:养殖双壳类贝类贝苗的碳量，吨每公顷（t/hm^2）
        """

        def fangFa1(N_bq, W_sh, C_ssh, W_m, C_sm):
            """
                按照数量计量
                输出：
                    C_BS:单位面积双壳贝类贝苗的碳量，吨每公顷（t/hm^2）
                输入：
                    N_bq:单位面积播苗数量，个每公顷（ind/hm^2）
                    W_sh:贝苗壳干重，克每个（g/ind）
                    C_ssh:贝苗壳含碳率
                    W_m:贝苗软体部分干重，克每个（g/ind）
                    C_sm:贝苗软体部分含碳率
            """
            C_BS = N_bq * (W_sh * C_ssh + W_m * C_sm) * 10 ** (-6)
            return C_BS

        def fangFa2(W_a, R_sdw, R_ssh, C_ssh, R_sm, C_sm):
            """
                按照生物量计量
                输出：
                    C_BS:养殖双壳贝类贝苗碳量，吨每公顷（t/hm^2）
                输入：
                    W_a:播苗总生物量，千克每公顷（ka/hm^2）
                    R_sdw:贝苗的干湿比
                    R_ssh:贝苗的贝壳质量比
                    R_sm:贝苗的软体部分质量比
            """
            C_BS = W_a * R_sdw * (R_ssh * C_ssh + R_sm * C_sm) * 10 ** (-3)
            return C_BS

        if methods == '1':
            C_BS = fangFa1(N_bq, W_sh, C_ssh, W_m, C_sm)
        elif methods == '2':
            C_BS = fangFa2(W_a, R_sdw, R_ssh, C_ssh, R_sm, C_sm)
            print(C_BS)
        return C_BS

    def adultCarbon(W_by, R_adw, R_ash, C_ash, R_am, C_am):
        """
            双壳贝类成体收获碳储量
            输出：
                C_BH:养殖双壳贝类成贝收获的碳量，吨每公顷（t/hm^2）
            输入：
                W_by:单位养殖面积的产量，千克每公顷（kg/hm^2）
                R_adw:成贝的干湿比
                R_ash:成贝的贝壳质量比
                C_ash:成贝壳含碳率
                R_am:成贝的软体部分质量比
                C_am:成贝软体部分含碳率
        """
        C_BH = W_by * R_adw * (R_ash * C_ash + R_am * C_am) * 10 ** (-3)
        return C_BH

    def changeInCarbonSPUT(C_BS, C_BH, T):
        """
            单位时间内碳储量变化（ChangeInCarbonSPUT）
                Change in carbon storage per unit time
                注：不满一年为一年
            输出：
                D_Cb:养殖周期内双壳贝类碳储量的变化，吨每公顷没每年（t/(hm^2*a)）
            输入：
                T:养殖周期，年（a）
        """
        D_Cb = (C_BH - C_BS) / T
        return D_Cb

    C_BH = adultCarbon(W_by, R_adw, R_ash, C_ash, R_am, C_am)
    C_BS = seedingCarbon(methods, N_bq, W_sh, C_ssh, W_m, C_sm, W_a, R_sdw, R_ssh, R_sm)
    D_Cb = changeInCarbonSPUT(C_BS, C_BH, T)  # 单位时间碳储量变化
    D_C_sink_b = D_Cb / r
    return D_C_sink_b


def totalCarbonSequestration(D_C_sink_bi, A_bi, n=1):
    """
        总碳汇量：totalCarbonSequestration
        输出：
            D_C_sink_bT：养殖区内双壳贝类的二氧化碳总碳汇量，吨每年（t/a）
        输入：
            D_Csinkbi：养殖i种双壳贝类的二氧化碳碳汇量，吨每公顷每年（t/(hm^2*a)）
            A_bi:养殖i种双壳贝类的面积，公顷（hm^2）
    """
    D_C_sink_bT = 0
    for i in range(n):
        D_C_sink_bT += D_C_sink_bi[i] * A_bi[i]
    return D_C_sink_bT


if __name__ == '__main__':

    methods = str(1)
    ls = [
        1,1,1,1,1,
        1,1,1,1,
        1,1,1,1,1,1,
        1
    ]
    A_bi = [1000]

    D_C_sink_bi = [carbonSequestration(methods, ls, r=12 / 44)]
    total = totalCarbonSequestration(D_C_sink_bi, A_bi, n=1)

    print(D_C_sink_bi, total)
